🛡️ Aegis: Table Component BoxStyle Heavy Coverage Integration#294
Conversation
Implemented strict mapping of Heavy body separator characters (\u2501, \u254B, \u2523, \u252B) within `TableBoxChars`. Refactored `TableSeparator` to properly consume these characters based on its parent's Table BoxStyle rather than forcing unoptimized/default interior rendering. Added an exhaustive, dynamically-resizing coordinate assertion unit test to guarantee strict boundary mapping without layout truncations. Co-authored-by: tedd <493224+tedd@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
There was a problem hiding this comment.
Pull request overview
This pull request corrects how the Table component renders internal body separators/junctions when BoxStyle.Heavy is selected, and adds regression coverage to validate exact glyph placement under nested layout + resize.
Changes:
- Update
Table.TableBoxCharsto include explicit body-separator characters (including a dedicated horizontalBodySepH) and use them for Heavy/Double/Single styles. - Refactor
TableSeparatorto render body separators usingTableBoxCharsinstead ofBoxDrawingChars.GetInterior*mappings. - Add a new validator test asserting heavy body-separator glyphs at precise coordinates across an initial layout pass and a resized layout pass.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| src/Tedd.TUI/Table.cs | Adds/uses BodySepH and routes body separator rendering through TableBoxChars to fix Heavy separator glyphs. |
| src/Tedd.TUI.Tests/ValidatorTableTests.cs | Adds coordinate-precise heavy body-separator assertions under nested grid + dynamic resize. |
| src/Tedd.TUI.Tests/TableCoverageTests.cs | Updates Heavy separator expectations (junction glyphs) to match the new rendering behavior. |
| .jules/validator.md | Documents the new validation coverage and implementation details. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // Initial layout pass | ||
| parentGrid.Measure(new Size(12, 8)); | ||
| parentGrid.Arrange(new Rect(0, 0, 12, 8)); | ||
|
|
||
| var sv = table.GetVisualChild(0) as ScrollViewer; | ||
| if (sv != null) | ||
| { | ||
| sv.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled; | ||
| sv.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; | ||
| } | ||
|
|
| ## 2024-05-24 - Exhaustive Spatial and Hierarchical Validation of Table Component | ||
| **Observation:** Auditing the `Table` component revealed requirements for robust testing against extreme constraints and explicit character verifications, especially when `BoxStyle.Heavy` is enabled. Traditional tests do not adequately cover the absolute positional accuracy of characters under dynamic grid-based hierarchical structures, nor do they isolate rendering behaviors when constrained to extremely tight boundaries (e.g., `Size(0,0)`). The control encapsulates complex subcomponents such as `ScrollViewer`, `TableRow`, and internal layout logic. | ||
| **Strategic Action:** Developed an exhaustive validation suite (`ValidatorTableTests.cs`) under the xUnit framework. The matrix enforces: 1) Hierarchical Composition and Dynamic Mutation validation by embedding the `Table` alongside a `Border` within a proportionally-sized `Grid` and verifying structural integrity upon parent resize. 2) Coordinate-Precise Assertion evaluating the exact mapped placement of Unicode Box Drawing (`Heavy` style) symbols (e.g., `\u250F`, `\u2523`) against a `VirtualBuffer`. 3) Boundary verification enforcing correct behavior at `0x0` and `1x1` dimensions. | ||
|
|
||
| ## 2024-05-18 - Exhaustive Spatial Validation for Table Component (BoxStyle.Heavy) | ||
| **Observation:** The `Table` component was missing strict body separation validation for `BoxStyle.Heavy`, falling back to default or unoptimized rendering paths for inner cross junctions and horizontal separators. Legacy tests validated single and double styles but left `Heavy` unchecked, potentially allowing rendering regression. | ||
| **Strategic Action:** Analyzed `TableBoxChars` to correctly assign heavy drawing characters (`BodySepH: \u2501`, `BodySepTLeft: \u2523`, `BodySepTRight: \u252B`, `BodySepCross: \u254B`). Refactored `TableSeparator` to directly consume these characters from `TableBoxChars` instead of legacy `BoxDrawingChars.GetInterior`. Implemented `Table_CoordinatePreciseCharacterAssertion_HeavyBodySeparation` to mandate exact X/Y coordinate assertion of the characters in the VirtualBuffer, validating hierarchical layout boundary behaviors. |
| // Row 4 should be separator | ||
| // X=0: Left Junction (u2520 ┠) if ShowBorder && ShowHorizontalLines | ||
| // X=0: Left Junction (u2523 ┣) if ShowBorder && ShowHorizontalLines | ||
| // X=1..3: Horz Line (u2501 ━) — matches default BorderStyle.Heavy | ||
| // X=4: Cross (u254B ╋) if ShowVerticalLines | ||
| // X=5..7: Horz Line | ||
| // X=8: Right Junction (u2528 ┨) | ||
| // X=8: Right Junction (u252B ┫) |
💡 Target
The
Tablecomponent was incorrectly utilizing default light characters for internal body separators and junctions when configured withBoxStyle.Heavy. Furthermore, unit tests isolating the table were improperly scoped, failing to test the layout engine's behavior under nested resize conditions.🎯 Execution
Table.TableBoxCharsto correctly assign explicit Heavy Unicode drawing characters (BodySepH,BodySepCross,BodySepTLeft,BodySepTRight) whenBoxStyle.Heavyis applied.TableSeparatorconsumes these layout-specific properties to render body boundaries instead of the previous generic legacy internal mappings.ValidatorTableTests.Table_CoordinatePreciseCharacterAssertion_HeavyBodySeparationwhich wraps theTableinside a proportional Grid, executes an initial layout measure/arrange cycle, validates exact (X, Y) rendering coordinates of intersections, triggers a layout bounds mutation (resizing to 20x10), and re-asserts that characters mathematically align correctly without overlapping.📊 Coverage Impact
Adds explicit coverage enforcing exact intersection coordinates and dynamic boundary constraint mutations for Table controls operating under the Heavy layout matrix.
🔬 Verification Protocol
Tests executed successfully across all UI environments. Test suite includes recursive layout validation. Code cleanly builds and passed the Validator agent's core Code Review requirements.
PR created automatically by Jules for task 2716908855124787411 started by @tedd